package disenioPantallas.ActividadesCampo;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

import disenioPantallas.elementos.EButton;
import disenioPantallas.elementos.EComboBox;
import disenioPantallas.elementos.ELabel;
import disenioPantallas.elementos.EPanel;
import disenioPantallas.elementos.MyTableModel;
import disenioPantallas.elementos.dialogGeneral;

import entidades.Actividad;
import entidades.ActividadEnPotrero;
import entidades.Campo;
import entidades.Potrero;
import gestores.GestorCampo;
import gestores.GestorErrores;
import gestores.GestorSistema;


import java.awt.Font;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.JTextArea;
import java.awt.SystemColor;
import javax.swing.border.SoftBevelBorder;
import javax.swing.border.BevelBorder;

import actionListeners.MascaraMayusculakeyListener;

import java.awt.FlowLayout;


public class DRegistrosDeActividades extends dialogGeneral {

	private static final long serialVersionUID = 1L;
	private GestorErrores gError=GestorErrores.getGestorErrores();
	private GestorSistema gSistema=GestorSistema.getGestorSistema();
	
	private JTable table;
	private JSpinner spinner;
	private JScrollPane scrollPane;
	private GestorCampo gCampo=GestorCampo.getGestorCampo();

	private Campo campoActual= gCampo.getCampoActual();
	private Potrero potreroActual;
	private JTextArea textArea;
	private EComboBox cbPotrero;
	private EComboBox cbActividad;
	private Vector<Potrero> potreros;
	private Vector<String> nombrePotreros;
	private Vector<Actividad> actividades;
	private Vector<String> nombreActividades;
	

	public DRegistrosDeActividades() {
		
		setPreferredSize(new Dimension(700, 400));
		setTitle("Registros de Actividades");
		setMinimumSize(new Dimension(750, 400));
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		Component verticalStrut = Box.createVerticalStrut(8);
		getContentPane().add(verticalStrut);
		
		JPanel panelTitulo = new EPanel();
		panelTitulo.setMaximumSize(new Dimension(500, 45));
		getContentPane().add(panelTitulo);
		
		String titulo=String.format("Registros de Actividades de: ");
		panelTitulo.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		JLabel lblPeajesDeAnimal = new ELabel(titulo);
		lblPeajesDeAnimal.setPreferredSize(new Dimension(280, 40));
//		JLabel lblPeajesDeAnimal = new ELabel("registro");
		lblPeajesDeAnimal.setFont(new Font("Cambria", Font.PLAIN, 20));
		panelTitulo.add(lblPeajesDeAnimal);
		
		cbPotrero = new EComboBox();
		panelTitulo.add(cbPotrero);
		cbPotrero.addActionListener(new PotreroAction());
		
		JPanel panelPesaje = new JPanel();
		panelPesaje.setOpaque(false);
		getContentPane().add(panelPesaje);
		panelPesaje.setLayout(new BoxLayout(panelPesaje, BoxLayout.X_AXIS));
		
		JPanel panelListado = new JPanel();
		panelListado.setOpaque(false);
		panelPesaje.add(panelListado);
		
		scrollPane = new JScrollPane();
		String registroTitulo=String.format("Registros de Actividades");
		scrollPane.setBorder(new TitledBorder(null, registroTitulo, TitledBorder.LEADING, TitledBorder.TOP, null, null));
		scrollPane.setPreferredSize(new Dimension(400, 300));
		scrollPane.setMinimumSize(new Dimension(400, 300));
		panelListado.add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);


		
		JPanel panelNuevo = new JPanel();
		panelNuevo.setOpaque(false);
		panelPesaje.add(panelNuevo);
		panelNuevo.setLayout(new BoxLayout(panelNuevo, BoxLayout.Y_AXIS));
		
		Component verticalStrut_1 = Box.createVerticalStrut(20);
		panelNuevo.add(verticalStrut_1);
		
		JPanel panelFecha = new EPanel();
		panelFecha.setPreferredSize(new Dimension(250, 50));
		panelFecha.setMaximumSize(new Dimension(400, 50));
		panelNuevo.add(panelFecha);
		
		JLabel lblFecha = new ELabel("Fecha:");
		lblFecha.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelFecha.add(lblFecha);
		lblFecha.setHorizontalAlignment(SwingConstants.LEFT);
		
		spinner = new JSpinner();
		spinner.setFont(new Font("Cambria", Font.PLAIN, 16));
		spinner.setModel(new SpinnerDateModel(new Date(1357268400000L), new Date(-2208973392000L), null, Calendar.DAY_OF_YEAR));
		spinner.setPreferredSize(new Dimension(150, 35));
		spinner.setValue(new Date());
		panelFecha.add(spinner);

		
		JPanel panelPeso = new EPanel();
		panelPeso.setPreferredSize(new Dimension(250, 50));
		panelPeso.setMaximumSize(new Dimension(400, 50));
		panelNuevo.add(panelPeso);
		
		JLabel lbActividad = new ELabel("Actividad:");
		lbActividad.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelPeso.add(lbActividad);
		lbActividad.setHorizontalAlignment(SwingConstants.LEFT);
		
		cbActividad = new EComboBox();
		panelPeso.add(cbActividad);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBorder(new TitledBorder(null, "Observacion", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelNuevo.add(scrollPane_1);
		
		textArea = new JTextArea();
		textArea.setBackground(SystemColor.controlHighlight);
		textArea.setOpaque(true);
		textArea.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
		scrollPane_1.setViewportView(textArea);
		textArea.addKeyListener(new MascaraMayusculakeyListener());
		
		JPanel panelAgregar = new EPanel();
		panelAgregar.setPreferredSize(new Dimension(250, 50));
		panelAgregar.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelAgregar);
		
		JButton btnAgregar = new EButton("AGREGAR");
		panelAgregar.add(btnAgregar);
		btnAgregar.addActionListener(new agregarAction());
		
		JPanel panel = new JPanel();
		panel.setOpaque(false);
		panel.setPreferredSize(new Dimension(250, 50));
		panel.setMinimumSize(new Dimension(250, 50));
		panel.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panel);
		
		JButton btnSalir = new EButton("SALIR");
		panel.add(btnSalir);
		btnSalir.setMaximumSize(new Dimension(150, 35));
		btnSalir.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				cerrarDialog();
			}
		});
		
		
		
		try {
			potreros=campoActual.getPotreros();
			nombrePotreros=new Vector<String>();
			nombrePotreros.add("");
			for(int i=0;i<potreros.size();i++){
				nombrePotreros.add(potreros.get(i).getNombrePotrero());
			}
			cbPotrero.setModel(new DefaultComboBoxModel<>(nombrePotreros));
			
			actividades=gSistema.getActividadesEncontradas();
			
			nombreActividades=new Vector<String>();
			nombreActividades.add("");
			for(int i=0;i<actividades.size();i++){
				nombreActividades.add(actividades.get(i).getNombreActividad());
			}
			cbActividad.setModel(new DefaultComboBoxModel<>(nombreActividades));
			

			
			table.setModel(new ListadoRegistroDeActividadesEnPotrero(new Vector<ActividadEnPotrero>()));

		} catch (Throwable e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			gError.mostrarCartelError(e1.getMessage());
		}


	}


	private class PotreroAction extends AbstractAction{

		
		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			String sPotrero=(String) cbPotrero.getSelectedItem();
			potreros=campoActual.getPotreros();
			
			for(int i=0;i<potreros.size();i++){
				if(potreros.get(i).getNombrePotrero().equals(sPotrero)) potreroActual=potreros.get(i);
			}
			

			table.setModel(new ListadoRegistroDeActividadesEnPotrero(potreroActual.getActividades()));

			
		}
		
	}
	
	private class ListadoRegistroDeActividadesEnPotrero extends MyTableModel {

		private static final long serialVersionUID = 1L;
		
		public ListadoRegistroDeActividadesEnPotrero(Vector<ActividadEnPotrero> actividades){
			super();
			
			String[] columnas={"ACTIVIDAD","FECHA","DESCRIPCION"};
			setColumnNames(columnas);
			Object[][] info= new Object[0][3];
			setColumnNames(columnas);

			if(actividades.size()>0){
				info= new Object[actividades.size()][3];
				for(int i=0;i<actividades.size();i++){
					info[i][0]=actividades.get(i).getActividad().getNombreActividad();
					info[i][1]=actividades.get(i).getFecha();
					info[i][2]=actividades.get(i).getDescripcion();
				}
			}
			setInfo(info);
			boolean[] edits= {false,false,false};
			setEdits(edits);
			
			
			
		}
	
	}
	
	private class agregarAction extends AbstractAction{


		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			Date fecha=(Date) spinner.getValue();
			String sPotrero=(String) cbPotrero.getSelectedItem();
			String sActividad=(String) cbActividad.getSelectedItem();
			Actividad actividad=null;
			Potrero potrero=null;
			String observacion=textArea.getText();
			
			for(int i=0;i<potreros.size();i++){
				if(potreros.get(i).getNombrePotrero().equals(sPotrero)) potrero=potreros.get(i);
			}
			 
			for(int i=0;i<actividades.size();i++){
				if(actividades.get(i).getNombreActividad().equals(sActividad)) actividad=actividades.get(i);
			}
			if(actividad!=null){
			 try {
				 int id=gCampo.registrarActividadEnPotrero(actividad.getIdActividad(), potrero.getIdPotrero(), fecha, observacion);
				 ActividadEnPotrero a=new ActividadEnPotrero(id,actividad, potrero, observacion, fecha);
				 potrero.getActividades().add(a);
				 table.setModel(new ListadoRegistroDeActividadesEnPotrero(potrero.getActividades()));
				 textArea.setText("");
				 cbActividad.setSelectedItem("");
				 gError.mostrarCartelAdvertencia("Se ha registrado Correctamente");
				 
				} catch (Throwable e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
					gError.mostrarCartelError(e1.getMessage());
				}
			
			}else
				gError.mostrarCartelError("Seleccione una actividad");
			
		}
		
	}
}

	